/*
 * 编写一个程序，提示用户输入名字，并执行以下操作：　　
 * a．打印名字，包括双引号；　　
 * b．在宽度为20的字段右端打印名字，包括双引号；　　
 * c．在宽度为20的字段左端打印名字，包括双引号；　　
 * d．在比姓名宽度宽3的字段中打印名字。
 * */

#include <stdio.h>
#include <string.h>

int main(){
	char name[50];
	printf("请写下的你的名：");
	scanf("%s",name);
	// a．打印名字，包括双引号；　　
	printf("\"%s\"\n",name);
	// b.在宽度为20的字段右端打印名字，包括双引号；　　
	printf("\"%20s\"\n",name);
	// c．在宽度为20的字段左端打印名字，包括双引号；　　
	printf("\"%-20s\"\n",name);
	// d．在比姓名宽度宽3的字段中打印名字。
	int length=strlen(name)+3;
	printf("\"%*s\"\n",length,name);
	return 0;
}

/*
 * 为什么printf的时候字符串和普通变量都不用带& ？
 *
 * 在C语言中，`printf`函数用于格式化输出，而不是读取用户的输入。
 * 因此，当您使用`printf`函数来打印字符串或普通变量时，不需要使用`&`运算符。
 * 1. **字符串：** 当您使用`printf`函数打印字符串时，您传递的是字符串的地址，因为字符串本身就是一个地址。
 * C语言中的字符串是以null终止的字符数组，数组名就是该字符串的地址。因此，不需要使用`&`运算符。
 * ```c
 * char str[] = "Hello";
 * printf("%s", str); // 不需要使用&运算符，直接传递字符串名即可
 * ```
 * 2. **普通变量：** 当您使用`printf`函数打印普通变量时，您传递的是变量的值，而不是地址。
 * `printf`函数通过格式字符串来确定如何打印变量的值，而不是通过地址来获取变量的值。因此，也不需要使用`&`运算符。   
 * ```c
 * int num = 10;
 * printf("%d", num); // 不需要使用&运算符，直接传递变量名即可
 * ```
 * 总之，在`printf`函数中，字符串和普通变量都不需要使用`&`运算符，因为它们的传递方式不同：字符串传递的是地址，普通变量传递的是值。
 * */
